/*
JS中作用域有：全局作用域、函数作用域。没有块作用域的概念。ECMAScript 6(简称ES6)中新增了块级作用域
块作用域由 { } 包括,if语句和for语句里面的{ }也属于块作用域
*/


/** 允许块级作用域任意嵌套*/
{
  let i = 'i1';
  /** 外层作用域无法读取内层作用域的变量*/
  // console.log(j); // ReferenceError: j is not defined
  {
    let j = 'j';
    console.log(i);
  }
}



/** 使用let、const申明虽然申明了,但不会变量提升,且即使上级作用域中也有同样的申明也不会顺着作用域链向上查找值(这也说明let、const在块级作用域里的代码执行前确实申明了,否则你把本块级作用域的let申明去掉,它是会顺着作用域链向上查找的)*/
{
  let i = 'i1';
  {
    let j = 'j';
    // console.log(i); // ReferenceError: i is not defined
    let i = 'i2';
    console.log(i);
  }
}



